#include <bits/stdc++.h>
#include <limits>
// using namespace std;

using ll = long long;

const ll max_n = 400+5;
ll n,k;
ll a[max_n];
ll dp[max_n][max_n], waste[max_n][max_n];
/*
抓住所有蛇的总浪费空间最小值
dp[i][j] 抓住第i条蛇，使用了j次调整大小的浪费空间的最小值
i,j,k
    k分为两段，1~k,k+1~i
    dp[i][j] = min(dp[i][j], dp[k][j-1]+waste[k+1][i])
waste[i][j] 从i~j浪费的数量
*/
const ll ll_max{std::numeric_limits<ll>::max()};

int main(){
    std::cin>>n>>k;
    for(ll i{1};i<=n;i++)std::cin>>a[i];
    for(ll i{0};i<max_n;i++)
        for(ll j{0};j<max_n;j++)
            dp[i][j]=ll_max;
    for(ll i{1};i<n;i++){
        ll max_ai{a[i]},sum{a[i]};
        // std::cout<<waste[i][i]<<' ';
        for(ll j{i+1};j<=n;j++){
            max_ai=std::max(a[j],max_ai);
            sum+=a[j];
            waste[i][j] = max_ai*(j-i+1)-sum;
            // std::cout<<waste[i][j]<<' ';
        }
        dp[i][0] = waste[1][i];
        // std::cout<<'\n';
    }
    
    for(ll j{1};j<=k;j++){
        for(ll i{j};i<=n;i++){
            for(ll k{1};k<i;k++){
                if(dp[k][j-1]==ll_max)continue;
                dp[i][j] = std::min(dp[i][j], dp[k][j-1]+waste[k+1][i]);
            }
        }
    }
    std::cout<<dp[n][k]<<'\n';
}